package com.fanghaoran.notes.util;

import com.fanghaoran.notes.bean.MyResult;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * @Author: win11
 * @Date: 2023/04/13/19:13
 * @Description: 字符串工具类
 */
public class StringUtil {
    /**
     *mysql变量格式转到java变量格式
     * @param str 要转换的变量名
     * @return 返回转换后的变量名
     */
    public static String transfer(String str){
        StringBuilder sb=new StringBuilder();
        //以下划线切割字符串
        String[] s = str.split("_");
        sb.append(s[0]);
        //小驼峰命名,从第二个单词开始,首字母大写
        for(int i=1;i<s.length;i++){
            //获取首字母
            String s1=s[i].substring(0, 1);
            //首字母大写化
            String s2 = s1.toUpperCase();
            //修改原字符串
            String s3 = s[i].replaceFirst(s1, s2);
            sb.append(s3);
        }
        return sb.toString();
    }

    /**
     * select类型的数据返回
     * @param list 数据库返回的list
     * @param <T> 集合的具体类型
     * @return 返回判断结果
     */
    public static <T> MyResult returnOfSelect (List<T> list){
        if(list.isEmpty()){
            return new MyResult(Constants.EMPTY,null);
        }else {
            return new MyResult(Constants.NONEMPTY,list);
        }
    }

    /**
     * update类型的数据返回
     * @param rows 数据库返回的影响行数
     * @return 返回判断结果
     */
    public static MyResult returnOfUpdate(Integer rows){
        if(rows.equals(Constants.FAIL)){
            return new MyResult(Constants.FAIL,null);
        }else{
            return new MyResult(Constants.SUCCESS,null);
        }
    }

    public static String getFileName(String filePath){
        String[] split = filePath.split("\\\\");
        return split[split.length-1];
    }

    /**
     * 转换成cron表达式字符串
     * @param dateStr 字符串
     * @return 返回转换后的字符串
     */
    public static String getCronExpression(String dateStr) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter);

        int year = dateTime.getYear();
        int month = dateTime.getMonthValue();
        int dayOfMonth = dateTime.getDayOfMonth();
        int hour = dateTime.getHour();
        int minute = dateTime.getMinute();
        int second = dateTime.getSecond();

        return String.format("%d %d %d %d %d ? %d",
                second, minute, hour, dayOfMonth, month, year);
    }
}
